home *** CD-ROM | disk | FTP | other *** search
- (************************************************************************************
- * Programm : R2G *
- * Version : 1.11 *
- * Lenght : 14324 *
- * *
- * Datum : 10.10.92 *
- * Autor : Jⁿrgen Bernd *
- * Compiler : AmigaOberon 2.13D *
- * *
- * Funktion : Dieses Programm erm÷glicht es ein 2-Farb-Rasterbild (Zeitungsdruck) *
- * in ein echtes 16-Graustufen-Bild zu konvertieren. Dies geschieht im *
- * im Gegensatz zu WASP2.02B ohne Gr÷▀enverlust. *
- ************************************************************************************)
-
- MODULE R2G;
-
- IMPORT
- S : SYSTEM,
- G : Graphics,
- Is : IFFSupport,
- I : Intuition,
- N : NoGuru,
- A : Arguments;
-
- VAR
- Count : INTEGER;
- OldSP,NewSP : I.ScreenPtr;
- OldRP : G.RastPortPtr;
- wp : I.WindowPtr;
- Name : ARRAY 20 OF CHAR;
- Buffer : ARRAY 640 OF BYTE;
-
- PROCEDURE OpenNewScreen();
- VAR
- k : INTEGER;
- MyS : I.NewScreen;
- VP : G.ViewPortPtr;
- BEGIN
- MyS.leftEdge := 0;
- MyS.topEdge := 0;
- MyS.width := OldSP^.width;
- MyS.height := OldSP^.height;
- MyS.depth := 4;
- MyS.detailPen := 7;
- MyS.blockPen := 0;
- MyS.viewModes := OldSP^.viewPort.modes;
- MyS.type := {};
- MyS.font := NIL;
- MyS.defaultTitle := NIL;
- MyS.gadgets := NIL;
- MyS.customBitMap := NIL;
- NewSP := I.OpenScreen(MyS);
- N.Assert(NewSP#NIL,"ERROR : can't open screen");
- VP := S.ADR(NewSP^.viewPort);
- k := 0;
- WHILE k<16 DO
- G.SetRGB4(VP,k,k,k,k);
- INC(k);
- END;
- END OpenNewScreen;
-
- PROCEDURE GetColor1(x,y : INTEGER) : INTEGER;
- VAR
- Color : LONGINT;
- BEGIN
- Color := 0;
- INC(Color,G.ReadPixel(OldRP,x-1,y-1));
- INC(Color,G.ReadPixel(OldRP,x-1,y));
- INC(Color,G.ReadPixel(OldRP,x-1,y+1));
- INC(Color,G.ReadPixel(OldRP,x,y-1));
- INC(Color,G.ReadPixel(OldRP,x,y));
- INC(Color,G.ReadPixel(OldRP,x,y+1));
- INC(Color,G.ReadPixel(OldRP,x+1,y-1));
- INC(Color,G.ReadPixel(OldRP,x+1,y));
- INC(Color,G.ReadPixel(OldRP,x+1,y+1));
- INC(Color,G.ReadPixel(OldRP,x,y-2));
- INC(Color,G.ReadPixel(OldRP,x,y+2));
- INC(Color,G.ReadPixel(OldRP,x+2,y));
- INC(Color,G.ReadPixel(OldRP,x-2,y));
- INC(Color,G.ReadPixel(OldRP,x+2,y-1));
- INC(Color,G.ReadPixel(OldRP,x+2,y+1));
- RETURN SHORT(Color);
- END GetColor1;
-
- PROCEDURE GetColor2(x,y : INTEGER) : INTEGER;
- VAR
- Color,Result : LONGINT;
- BEGIN
- Color := 0;
- INC(Color,G.ReadPixel(OldRP,x-1,y-1));
- INC(Color,G.ReadPixel(OldRP,x-1,y));
- INC(Color,G.ReadPixel(OldRP,x-1,y+1));
- INC(Color,G.ReadPixel(OldRP,x,y-1));
- INC(Color,G.ReadPixel(OldRP,x,y));
- INC(Color,G.ReadPixel(OldRP,x,y+1));
- INC(Color,G.ReadPixel(OldRP,x+1,y-1));
- INC(Color,G.ReadPixel(OldRP,x+1,y));
- INC(Color,G.ReadPixel(OldRP,x+1,y+1));
- Result := Color*3;
- Color := 0;
- INC(Color,G.ReadPixel(OldRP,x,y-2));
- INC(Color,G.ReadPixel(OldRP,x,y+2));
- INC(Color,G.ReadPixel(OldRP,x+2,y));
- INC(Color,G.ReadPixel(OldRP,x-2,y));
- INC(Color,G.ReadPixel(OldRP,x+2,y-1));
- INC(Color,G.ReadPixel(OldRP,x+2,y+1));
- INC(Color,G.ReadPixel(OldRP,x-2,y-2));
- INC(Color,G.ReadPixel(OldRP,x-1,y-2));
- INC(Color,G.ReadPixel(OldRP,x+1,y-2));
- INC(Color,G.ReadPixel(OldRP,x+2,y-2));
- INC(Color,G.ReadPixel(OldRP,x-2,y-1));
- INC(Color,G.ReadPixel(OldRP,x-2,y+1));
- INC(Color,G.ReadPixel(OldRP,x-2,y+2));
- INC(Color,G.ReadPixel(OldRP,x-1,y+2));
- INC(Color,G.ReadPixel(OldRP,x+1,y+2));
- INC(Color,G.ReadPixel(OldRP,x+2,y+2));
- INC(Result,Color*2);
- INC(Result,G.ReadPixel(OldRP,x-3,y-3));
- INC(Result,G.ReadPixel(OldRP,x-2,y-3));
- INC(Result,G.ReadPixel(OldRP,x-1,y-3));
- INC(Result,G.ReadPixel(OldRP,x,y-3));
- INC(Result,G.ReadPixel(OldRP,x+1,y-3));
- INC(Result,G.ReadPixel(OldRP,x+2,y-3));
- INC(Result,G.ReadPixel(OldRP,x+3,y-3));
- INC(Result,G.ReadPixel(OldRP,x-3,y-2));
- INC(Result,G.ReadPixel(OldRP,x+3,y-2));
- INC(Result,G.ReadPixel(OldRP,x-3,y-1));
- INC(Result,G.ReadPixel(OldRP,x+3,y-1));
- INC(Result,G.ReadPixel(OldRP,x-3,y));
- INC(Result,G.ReadPixel(OldRP,x+3,y));
- INC(Result,G.ReadPixel(OldRP,x+3,y+1));
- INC(Result,G.ReadPixel(OldRP,x-3,y+1));
- INC(Result,G.ReadPixel(OldRP,x-3,y+2));
- INC(Result,G.ReadPixel(OldRP,x+3,y+2));
- INC(Result,G.ReadPixel(OldRP,x-3,y+3));
- INC(Result,G.ReadPixel(OldRP,x-2,y+3));
- INC(Result,G.ReadPixel(OldRP,x-1,y+3));
- INC(Result,G.ReadPixel(OldRP,x,y+3));
- INC(Result,G.ReadPixel(OldRP,x+1,y+3));
- INC(Result,G.ReadPixel(OldRP,x+2,y+3));
- INC(Result,G.ReadPixel(OldRP,x+3,y+3));
- RETURN SHORT(Result DIV 5);
- END GetColor2;
-
- PROCEDURE ConvertPic();
- VAR
- MaxX,MaxY,x,y : INTEGER;
- NewRP : G.RastPortPtr;
- Dummy : BOOLEAN;
- BEGIN
- OpenNewScreen();
- MaxX := OldSP^.width-3;
- MaxY := OldSP^.height-3;
- OldRP := S.ADR(OldSP^.rastPort);
- NewRP := S.ADR(NewSP^.rastPort);
- IF Count=2 THEN
- y := 2;
- WHILE y<=MaxY DO
- x := 2;
- WHILE x<=MaxX DO
- G.SetAPen(NewRP,GetColor1(x,y));
- Dummy := G.WritePixel(NewRP,x,y);
- INC(x);
- END;
- INC(y);
- END;
- ELSE
- y := 3;
- WHILE y<MaxY DO
- x := 3;
- WHILE x<MaxX DO
- G.SetAPen(NewRP,GetColor2(x,y));
- Dummy := G.WritePixel(NewRP,x,y);
- INC(x);
- END;
- INC(y);
- END;
- END;
- END ConvertPic;
-
- PROCEDURE CleanUp();
- BEGIN
- IF OldSP#NIL THEN
- I.OldCloseScreen(OldSP);
- END;
- IF NewSP#NIL THEN
- I.OldCloseScreen(NewSP);
- END;
- END CleanUp;
-
- BEGIN
- Count := A.NumArgs();
- N.Assert((Count=2) OR (Count=3),"SYNTAX : M2G [inputfile] [outputfile] <HIGH>");
- A.GetArg(1,Name);
- N.Assert(Is.ReadILBM(Name,{Is.front},OldSP,wp)=TRUE,"ERROR : can't load picture");
- ConvertPic();
- A.GetArg(2,Name);
- N.Assert(Is.WriteILBMScreen(Name,NewSP,NIL,TRUE)=TRUE,"ERROR : can't save picture");
- CLOSE
- CleanUp();
- END R2G.
-